The rapid and accurate transmission of data has become increasingly important as computer use has become widespread. Error detection and correction schemes are commonly used to ensure that data is accessed and transmitted without errors, both within a computer system and across networks such as a local area network (LAN) or the Internet. In one such error detection scheme, a checksum is calculated for a block of data and is transmitted along with that block of data. The receiver may then recalculate the checksum for the block of data and compare it with the originally calculated and transmitted checksum. Any differences between the two checksums indicate an error in the transmitted block of data (or in the transmitted checksum). Many different types of checksums are commonly used, and many techniques are known for calculating various types of checksums. For example, one type of checksum is a cyclic redundancy check (CRC), which may be calculated in one exemplary algorithm by dividing the number in the block of data by a constant number and using the remainder as the checksum. The division may be performed, for example, using binary arithmetic modulo 2 with no carries.
Some data handling systems include multiple layers of data packaging and error checking, in which multiple checksums are calculated for various combinations of a block of data, header information and checksums. For example, the PCI Express system includes multiple layers such as a data link layer and a transaction layer. At the transaction layer, a block of data is accompanied by an end-to-end checksum based on the block of data. At the data link layer, the block of data may be accompanied by the end-to-end checksum, other information such as a sequence number to ensure that multiple blocks of data are in order, and a link checksum based on the block of data, the sequence number, the end-to-end checksum, etc. The electronic circuits or computer executable code for calculating these CRC checksums, particularly when multiple checksums must be calculated for multiple layers, quickly become relatively large as the number of checksums to calculate grows. The size of the electronic circuits or computer executable code may be further multiplied if the data handling system supports multiple data block lengths.